#pragma once
#include<unistd.h>
#include<iostream>
#include<string>
#include<signal.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

static const std::string defaultdir="/";
static const std::string defaultdev="/dev/null";


void Deamon(bool isredir,bool isclose)
{
    signal(SIGCHLD,SIG_IGN);
    signal(SIGPIPE,SIG_IGN);

    pid_t pid=fork();
    if(pid>0)exit(0);

    setsid();


    if(isredir)
    {
        chdir(defaultdir.c_str());
    }
    if(isclose)
    {
        ::close(0);
        ::close(1);
        ::close(2);
    }
    else
    {
        int fd=open(defaultdev.c_str(),O_RDWR);
        if(fd>0)
        {
            dup2(fd,0);
            dup2(fd,1);
            dup2(fd,2);
        }
    }
}